﻿using AcademiaInteligenteData.DML;
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;

namespace AcademiaInteligenteData.DAL
{
    class DaoModalidade : DaoConnection
    {
        public void InserirModalidade(Modalidade modalidade)
        {
            string insertModalidade = "ai_sp_inserirModalidade";
            List<SqlParameter> parametros = new List<SqlParameter>();

            parametros.Add(new SqlParameter("@id", modalidade.Id));
            parametros[0].Direction = System.Data.ParameterDirection.InputOutput;
            parametros.Add(new SqlParameter("@descricao", modalidade.Descricao));
            parametros.Add(new SqlParameter("@id_academia", modalidade.Academia.Id));
            parametros.Add(new SqlParameter("@id_tipo_modalidade", modalidade.IdTipoModalidade));
            parametros.Add(new SqlParameter("@ativo", true));
            parametros.Add(new SqlParameter("@data_inclusao", DateTime.Now));
            Executar(insertModalidade, true, parametros);
            modalidade.Id = Convert.ToInt32(parametros[0].Value);
        }
        public void AlterarModalidade(Modalidade modalidade)
        {
            string alterarModalidade = "ai_sp_alterarModalidade";
            List<SqlParameter> parametros = new List<SqlParameter>();

            parametros.Add(new SqlParameter("@id", modalidade.Id));
            parametros.Add(new SqlParameter("@descricao", modalidade.Descricao));
            parametros.Add(new SqlParameter("@id_academia", modalidade.Academia.Id));
            parametros.Add(new SqlParameter("@id_tipo_modalidade", modalidade.IdTipoModalidade));
            parametros.Add(new SqlParameter("@ativo", modalidade.Ativo));

            Executar(alterarModalidade, true, parametros);
        }

        public void InserirModalidadeHorario(Modalidade_Horario modalidade_horario)
        {
            string insertModalidade = "ai_sp_inserirModalidadeHorario";
            List<SqlParameter> parametros = new List<SqlParameter>();

            parametros.Add(new SqlParameter("@id", modalidade_horario.Id));
            parametros[0].Direction = System.Data.ParameterDirection.InputOutput;
            parametros.Add(new SqlParameter("@hora", modalidade_horario.Hora.Hour + modalidade_horario.Hora.Minute / 60));
            parametros.Add(new SqlParameter("@dia_semana", modalidade_horario.Dia));
            parametros.Add(new SqlParameter("@id_modalidade", modalidade_horario.IdModalidade));
            parametros.Add(new SqlParameter("@duracao", modalidade_horario.Duracao.Hour + modalidade_horario.Duracao.Minute / 60));
            Executar(insertModalidade, true, parametros);
            modalidade_horario.Id = Convert.ToInt32(parametros[0].Value);
        }
        public void AlterarModalidadeHorario(Modalidade_Horario modalidade_horario)
        {
            string alterarModalidade = "ai_sp_alterarModalidadeHorario";
            List<SqlParameter> parametros = new List<SqlParameter>();

            parametros.Add(new SqlParameter("@id", modalidade_horario.Id));
            parametros.Add(new SqlParameter("@hora", modalidade_horario.Hora.Hour + modalidade_horario.Hora.Minute / 60));
            parametros.Add(new SqlParameter("@dia_semana", modalidade_horario.Dia));
            parametros.Add(new SqlParameter("@id_modalidade", modalidade_horario.IdModalidade));
            parametros.Add(new SqlParameter("@duracao", modalidade_horario.Duracao.Hour + modalidade_horario.Duracao.Minute / 60));
            Executar(alterarModalidade, true, parametros);
        }
        public void ExcluirModalidadePorID(int id)
        {
            string excluirModalidade = "ai_sp_excluirModalidade";
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@id", id));
            Executar(excluirModalidade, true, parametros);
        }
        public Modalidade SelecionarModalidadePorID(int id)
        {
            string selecionaModalidade = "ai_sp_selecionarModalidadePorID";
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@id", id));
            DataSet reader = Selecionar(selecionaModalidade, true, parametros);
            int i = 0;
            Modalidade modalidade = new Modalidade();
            modalidade.Descricao = Convert.ToString(reader.Tables[0].Rows[i]["descricao"]);
            modalidade.Academia.Id = Convert.ToInt32(reader.Tables[0].Rows[i]["id_academia"]);
            modalidade.TipoModalidade.Id = Convert.ToInt32(reader.Tables[0].Rows[i]["id_tipo_modalidade"]);

            modalidade.Id = id;
            return modalidade;
        }

        internal List<Modalidade> ListarModalidades()
        {
            string selecionaModalidade = "ai_sp_listarModalidade";
            List<SqlParameter> parametros = new List<SqlParameter>();
            DataSet reader = Selecionar(selecionaModalidade, true, parametros);
            List<Modalidade> modalidades = new List<Modalidade>();
            for (int i = 0; i < reader.Tables[0].Rows.Count; i++)
            {
                Modalidade modalidade = new Modalidade();
                modalidade.Descricao = Convert.ToString(reader.Tables[0].Rows[i]["descricao"]);
                modalidade.Academia.Id = Convert.ToInt32(reader.Tables[0].Rows[i]["id_academia"]);
                modalidade.TipoModalidade.Id = Convert.ToInt32(reader.Tables[0].Rows[i]["id_tipo_modalidade"]);
                modalidade.Id = Convert.ToInt32(reader.Tables[0].Rows[i]["id"]);
                modalidades.Add(modalidade);
            }
            return modalidades;
        }
        internal List<Modalidade> SelecionarModalidadePorAcademia(int idAcademia)
        {
            string selecionaModalidade = "ai_sp_selecionarModalidadePorAcademia";
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@id_academia", idAcademia));
            DataSet reader = Selecionar(selecionaModalidade, true, parametros);
            List<Modalidade> modalidades = new List<Modalidade>();
            int idModalidadeAtual = 0;
            for (int i = 0; i < reader.Tables[0].Rows.Count; i++)
            {
                Modalidade modalidade = new Modalidade();
                modalidade.Academia.Id = Convert.ToInt32(reader.Tables[0].Rows[i]["id_academia"]);
                modalidade.Descricao = Convert.ToString(reader.Tables[0].Rows[i]["descricao"]);
                modalidade.DataInclusao = Convert.ToDateTime(reader.Tables[0].Rows[i]["data_inclusao"]);
                modalidade.Id = Convert.ToInt32(reader.Tables[0].Rows[i]["id"]);
                modalidade.TipoModalidade = new TipoModalidade();
                modalidade.TipoModalidade.Id = Convert.ToInt32(reader.Tables[0].Rows[i]["id_tipo_modalidade"]);
                modalidade.TipoModalidade.Descricao = Convert.ToString(reader.Tables[0].Rows[i]["tipo_modalidade"]);
                idModalidadeAtual = Convert.ToInt32(reader.Tables[0].Rows[i]["id"]);
                modalidade.ModalidadeHorario = SelecionarHorarioModalidade(idModalidadeAtual);
                modalidades.Add(modalidade);

            }
            return modalidades;
        }
        internal List<Modalidade_Horario> SelecionarHorarioModalidade(int idModalidade)
        {
            string selecionaModalidade = "ai_sp_selecionarModalidadeHorarioPorModalidade";
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@id_modalidade", idModalidade));
            DataSet reader = Selecionar(selecionaModalidade, true, parametros);
            List<Modalidade_Horario> modalidades = new List<Modalidade_Horario>();
            for (int i = 0; i < reader.Tables[0].Rows.Count; i++)
            {
                Modalidade_Horario modalidadeHorario = new Modalidade_Horario();
                modalidadeHorario.IdModalidade = idModalidade;
                modalidadeHorario.Dia = (Modalidade_Horario.DiaSemana)Enum.Parse(typeof(Modalidade_Horario.DiaSemana), reader.Tables[0].Rows[i]["dia_semana"].ToString());
                modalidadeHorario.Hora = DateTime.MinValue.AddHours(Convert.ToDouble(reader.Tables[0].Rows[i]["hora"]));
                modalidadeHorario.Duracao = DateTime.MinValue.AddHours(Convert.ToDouble(reader.Tables[0].Rows[i]["duracao"]));
                modalidadeHorario.Id = Convert.ToInt32(reader.Tables[0].Rows[i]["id"]);
                modalidadeHorario.Funcionarios = SelecionarFuncionarioHorarioModalidade(modalidadeHorario.Id);
                modalidadeHorario.Clientes = SelecionarClienteHorarioModalidade(modalidadeHorario.Id);
                modalidades.Add(modalidadeHorario);
            }
            return modalidades;
        }

        internal List<Funcionario> SelecionarFuncionarioHorarioModalidade(int idModalidadeHorario)
        {
            string selecionaModalidade = "ai_sp_selecionarFuncionarioPorModalidadeHorario";
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@id_modalidade_horario", idModalidadeHorario));
            DataSet reader = Selecionar(selecionaModalidade, true, parametros);
            List<Funcionario> funcionarios = new List<Funcionario>();
            for (int i = 0; i < reader.Tables[0].Rows.Count; i++)
            {
                Funcionario funcionario = new Funcionario();
                funcionario.Nome = Convert.ToString(reader.Tables[0].Rows[i]["nome"]);
                funcionario.Id_academia = Convert.ToInt32(reader.Tables[0].Rows[i]["id_academia"]);
                funcionario.Login = Convert.ToString(reader.Tables[0].Rows[i]["login"]);
                funcionario.TipoFuncionario.id = Convert.ToInt32(reader.Tables[0].Rows[i]["id_tipo_funcionario"]);
                funcionario.Id = Convert.ToInt32(reader.Tables[0].Rows[i]["id"]);
                funcionarios.Add(funcionario);
            }
            return funcionarios;
        }

        internal List<Cliente> SelecionarClienteHorarioModalidade(int idModalidadeHorario)
        {
            string selecionaModalidade = "ai_sp_selecionarClientePorModalidadeHorario";
            List<SqlParameter> parametros = new List<SqlParameter>();
            parametros.Add(new SqlParameter("@id_modalidade_horario", idModalidadeHorario));
            DataSet reader = Selecionar(selecionaModalidade, true, parametros);
            List<Cliente> clientes = new List<Cliente>();
            for (int i = 0; i < reader.Tables[0].Rows.Count; i++)
            {
                Cliente cliente = new Cliente();
                cliente.Nome = Convert.ToString(reader.Tables[0].Rows[i]["nome"]);
                //cliente.Login = Convert.ToString(reader.Tables[0].Rows[i]["login"]);
                //cliente.Senha = Convert.ToString(reader.Tables[0].Rows[i]["senha"]);
                cliente.Endereco = Convert.ToString(reader.Tables[0].Rows[i]["endereco"]);
                cliente.Numero = Convert.ToString(reader.Tables[0].Rows[i]["numero"]);
                cliente.Complemento = Convert.ToString(reader.Tables[0].Rows[i]["complemento"]);
                cliente.Bairro = Convert.ToString(reader.Tables[0].Rows[i]["bairro"]);
                cliente.Cidade = Convert.ToString(reader.Tables[0].Rows[i]["cidade"]);
                cliente.Cep = Convert.ToString(reader.Tables[0].Rows[i]["cep"]);
                cliente.Estado = Convert.ToString(reader.Tables[0].Rows[i]["estado"]);
                cliente.Cpf = Convert.ToString(reader.Tables[0].Rows[i]["cpf"]);
                cliente.Sexo = Convert.ToString(reader.Tables[0].Rows[i]["sexo"]);
                cliente.Altura = Convert.ToDouble(reader.Tables[0].Rows[i]["altura"]);
                cliente.Id = Convert.ToInt32(reader.Tables[0].Rows[i]["id"]);
                cliente.Valor_ModalidadeHorario = Convert.ToDouble(reader.Tables[0].Rows[i]["valor"]);
                clientes.Add(cliente);

            }
            return clientes;
        }
    }
}
